package com.swy.service;

import com.swy.model.SensitiveWord;
import com.swy.model.ImportResult;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Set;

/**
 * 敏感词服务接口
 */
public interface SensitiveWordService {
    
    /**
     * 获取所有敏感词
     *
     * @return 所有敏感词列表
     */
    List<SensitiveWord> getAllSensitiveWords();

    /**
     * 添加敏感词
     *
     * @param word 敏感词
     */
    void addSensitiveWord(String word);

    /**
     * 删除敏感词
     *
     * @param word 敏感词
     */
    void deleteSensitiveWord(String word);

    /**
     * 批量删除敏感词
     *
     * @param words 要删除的敏感词列表
     */
    void deleteSensitiveWords(List<String> words);

    /**
     * 批量导入敏感词
     *
     * @param inputStream 包含敏感词的输入流，每行一个词
     * @return 导入结果，包含成功导入数和重复数
     * @throws IOException 如果读取文件出错
     */
    ImportResult importSensitiveWords(InputStream inputStream) throws IOException;

    /**
     * 获取敏感词集合
     *
     * @return 不可修改的敏感词集合
     */
    Set<String> getSensitiveWordSet();

    /**
     * 重新加载敏感词库
     */
    void reloadSensitiveWords();

    /**
     * 搜索敏感词 (支持分页)
     *
     * @param keyword 搜索关键字
     * @param page    页码 (从1开始)
     * @param size    每页大小
     * @return 敏感词列表
     */
    List<SensitiveWord> searchSensitiveWords(String keyword, int page, int size);

    /**
     * 计算敏感词总数 (支持搜索)
     *
     * @param keyword 搜索关键字
     * @return 敏感词总数
     */
    int countSensitiveWords(String keyword);

    void deleteWord(String word);
    
    ImportResult importSensitiveWords(List<String> words);

    /**
     * 清理缓存
     * 清理上传文件目录中的临时文件
     */
    void cleanCache();

    /**
     * 检测文本中的敏感词
     *
     * @param text 要检测的文本
     * @return 检测到的敏感词列表
     */
    List<String> detectSensitiveWords(String text);

    /**
     * 模糊检测文本中的敏感词，返回敏感词和命中子串
     * @param text 要检测的文本
     * @return 检测到的敏感词及命中子串列表
     */
    java.util.List<com.swy.service.impl.SensitiveWordServiceImpl.FuzzyMatchResult> detectSensitiveWordsFuzzy(String text);
} 